﻿using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace DexKey.Views.Registro
{
    /// <summary>
    /// Interaction logic for LicenseGenerator.xaml
    /// </summary>
    public partial class LicenseGenerator : Window
    {

        private int codTecnico = 0;
        private string senha = "";
        private int versao = 0;
        private string modulosKey = "G";
        private DateTime dataInicial;
        private DateTime dataFinal;
        private bool sincronizado = false;
        private ConexaoMysql conMysql;

        public LicenseGenerator()
        {
            InitializeComponent();
            conMysql = new ConexaoMysql();
            txtDataAdesao.Text = DateTime.Now.ToShortDateString();
            txtDataExpiracao.Text = getFinalDate(txtDataAdesao.Text.ToString());
        }



        private string getFinalDate(string dataAdesao)
        {
            dataInicial = Convert.ToDateTime(dataAdesao);

            int dia = dataInicial.Day;
            int mes = dataInicial.Month + 1;
            int ano = dataInicial.Year;

            dataFinal = new DateTime(ano, mes, dia);

            return dataFinal.ToShortDateString();
        }

        private void MarcarTodos(object sender, RoutedEventArgs e)
        {
            var check = sender as CheckBox;

            if (check.IsChecked == true)
            {
                mRHumanos.IsChecked = true;
                mFinanceiro.IsChecked = true;
                mFiscal.IsChecked = true;
                mOrcamento.IsChecked = true;
                mOrdemServico.IsChecked = true;
                mEstoque.IsChecked = true;

                modulosKey += "RFFOOE";
            }
            else
            {
                mRHumanos.IsChecked = false;
                mFinanceiro.IsChecked = false;
                mFiscal.IsChecked = false;
                mOrcamento.IsChecked = false;
                mOrdemServico.IsChecked = false;
                mEstoque.IsChecked = false;
            }
        }

        private void InformarQntdeMaquina(object sender, RoutedEventArgs e)
        {
            if (ckWeb.IsChecked == true)
            {
                versao = 1;
                lblQntdeMaquinas.Visibility = Visibility.Visible;
                txtQntdeMaquinas.Visibility = Visibility.Visible;
            }
            else
            {
                lblQntdeMaquinas.Visibility = Visibility.Hidden;
                txtQntdeMaquinas.Visibility = Visibility.Hidden;
            }
        }

        private void GerarLincensa(object sender, RoutedEventArgs e)
        {
            if (!sincronizado)
            {
                MessageBox.Show("Você precisa sincronizar-se como técnico para realizar esta operação.");
            }
            else
            {
                long cnpj = long.Parse(Utils.RemoverCaracteres(txtCNPJ.Text.ToString()));
                txtHashComposto.Text = Utils.EncryptMd5LicenseKey(0, cnpj, modulosKey, dataInicial, dataFinal);
                btnAtivarLicenca.IsEnabled = true;
            }
        }

        private void SalvarLincensa(object sender, RoutedEventArgs e)
        {
            if (!sincronizado)
            {
                MessageBox.Show("Você precisa sincronizar-se como técnico para realizar esta operação.");
            }
            else
            {
                try
                {
                    Dados.query = "INSERT INTO licensagerada(CodTecnico,Cnpj,Chave,ModulosLiberados,GeradaEm,ExpiraEm) Values('"
                        + codTecnico + "','"
                        + txtCNPJ.Text.ToString() + "','"
                        + txtHashComposto.Text.ToString() + "','"
                        + modulosKey + "','" +
                        txtDataAdesao.Text.ToString() + "','" +
                        txtDataExpiracao.Text.ToString() + "')";

                    Dados.myCommandMysql = new MySqlCommand(Dados.query, Dados.connMysql);

                    Dados.myCommandMysql.ExecuteNonQuery();
                    Dados.connMysql.Close();

                    MessageBox.Show("Licença gerada e registrada com sucesso.");

                    this.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
            }
        }

        //IdTecnico
        //É necessário para gerar a licensa, para isso o mesmo tem que sincronizar com o banco de dados
        //se não houver internet esse id técnico de deve ser gerado na hora
        public void SincronizarTecnicoResponsavel(object sender, RoutedEventArgs e)
        {
            if (!txtIdTecnico.Text.Equals("") || txtSenhaTecnico.Text.Equals(""))
            {
                codTecnico = int.Parse(txtIdTecnico.Text.ToString());
                senha = Utils.EncryptMd5(txtSenhaTecnico.Text.ToString(), false);
            }
            else
            {
                MessageBox.Show("Campo(s) ID técnico e ou SENHA não preenchidos");
            }

            try
            {
                Dados.query = "select nome From tecnicoresponsavel WHERE Codigo = '" + codTecnico + "' and senha = '" + senha + "'";
                Dados.myCommandMysql = new MySqlCommand(Dados.query, Dados.connMysql);
                Dados.mdaMysql = new MySqlDataAdapter(Dados.query, Dados.connMysql);
                Dados.dsMysql = new DataSet();

                Dados.mdaMysql.Fill(Dados.dsMysql, "tecnicoresponsavel");
                Dados.dataMember = "tecnicoresponsavel";

                if (Dados.dsMysql.Tables["tecnicoresponsavel"].Rows.Count > 0)
                {
                    DataRow dRow = Dados.dsMysql.Tables["tecnicoresponsavel"].Rows[0];
                    string nomeTecnico = dRow.ItemArray.GetValue(0).ToString();
                    MessageBox.Show("" + nomeTecnico + ", você está sincronizado.");
                    sincronizado = true;
                }
                else
                {
                    MessageBox.Show("Sincronização negada: Verifica seus dados.");
                }

            }
            catch (Exception ex)
            {

            }
        }

        private void AdicionarModulo(object sender, RoutedEventArgs e)
        {
            if (mRHumanos.IsChecked == true)
            {
                modulosKey += 'R';
            }
            if (mFinanceiro.IsChecked == true)
            {
                modulosKey += 'F';
            }
            if (mFiscal.IsChecked == true)
            {
                modulosKey += 'F';
            }
            if (mOrcamento.IsChecked == true)
            {
                modulosKey += 'O';
            }
            if (mOrdemServico.IsChecked == true)
            {
                modulosKey += 'O';
            }
            if (mEstoque.IsChecked == true)
            {
                modulosKey += 'E';
            }
        }
    }
}
